#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void encypt(char *sourcefile,char *pwd,char *codefile)
{
	FILE *fp1,*fp2;
	int i=0;
	/*register它的作用是暗示编译器这个变量有可能会被频繁地用到，
	建议把它放到寄存器里面，从而提高运行速率。*/
	register char ch;
	if((fp1=fopen(sourcefile,"rb"))==NULL)
	{
		printf("fopen %s error!\n",sourcefile);
		exit(0);
	}
	if((fp2=fopen(codefile,"wb+"))==NULL)
	{
		printf("fopen %s error!\n",sourcefile);
		exit(0);
	}
	ch=fgetc(fp1);
	while(!feof(fp1))//测试文件是否结束
	{
		ch=ch^*(pwd+i);//采用异或进行加密
		i++;
		fputc(ch,fp2);
		ch=fgetc(fp1);
		if(i>9)i=0;
	}
	fclose(fp1);
	fclose(fp2);
}

int main(int argc,char*argv[])
{
	//1.要加密的文件
	char sourcefile[60];
	//2.要加密的文件
	char codefile[60];
	//3.密码
	char pwd[18];
	//容错处理
	if(argc!=4)
	{
		printf("please input encode file name:\n");
		gets(sourcefile);
		printf("please input password:\n");
		gets(pwd);
		printf("please input saved file name:\n");
		gets(codefile);
		encypt(sourcefile,pwd,codefile);
	}
	else
	{
		strcpy(sourcefile,argv[1]);
		strcpy(pwd,argv[2]);
		strcpy(codefile,argv[3]);
		encypt(sourcefile,pwd,codefile);
	}

	return 0;
}

